• When VM was inactive and the processor was not a 68040, A/ROSE 1.2 left a block of shared motherboard memory used by NuBus cards unlocked and cachable. This improved performance on 68030-based Macintoshes (see the release notes for A/ROSE 1.1.8). For performance reasons, the 68040's data cache(s) are implemented very differently than the 68030's, so the A/ROSE driver must leave the shared memory locked and non-cachable on 68040-based Macintoshes.
The PowerPC emulation mode emulates a 68020 so thoroughly that even Gestalt reports that the processor is a 68020. However, the 601 chip's data cache implementation is similar to the 68040's. Because Gestalt reported the processor as a 68020, the A/ROSE driver was unlocking the shared memory, causing a hang on PowerPC machines. The problems did not occur when VM was active, since A/ROSE must keep the shared memory locked to prevent the memory from being paged to disk or relocated, regardless of the processor.
The fix was to check the new Gestalt system architecture selector, 'sysa', to determine the family of the processor on the motherboard (68000 family or PowerPC family). If the processor is a PowerPC, A/ROSE leaves the shared memory locked down even though the PowerPC is emulating a 68020.
• On PowerPC-based Macintoshes, A/ROSE now page-aligns the block of shared motherboard memory used by NuBus cards and pads the memory out to the next page boundary. This prevents other memory surrounding the shared memory from being made noncachable when the block is locked down using LockMemory. This code was already being executed on 68040-based Macintoshes, but it's now also being executed on PowerPC-based machines.
Release notes for A/ROSE 1.2
• Added calls to void the data cache(s) in the NewFindCard and ICC_GetCards code to avoid a caching problem when switching to EtherTalk on the Mac IIvx. On a Mac IIvx with a smart EtherTalk card installed, switching from LocalTalk to EtherTalk in the Network CDEV would often bring up a dialog box stating that the switch could not be performed and that LocalTalk would be used instead.
The problem was that after the EtherTalk driver caused the A/ROSE OS to be downloaded to the NuBus card, the EtherTalk driver called the A/ROSE driver to verify that the card was up and running. The A/ROSE driver determined this by checking its table of communications area pointers, ca_Rec.Addrs. Because of the large (32K) secondary data cache on the Mac IIvx, this table was often cached when driver examined it. Because the stale data in the cache still indicated that the card was not yet running the A/ROSE OS, the EtherTalk driver would give up on downloading the EtherTalk code to the card.
Although the problem has only been seen with the EtherTalk driver, any user code that checked a newly-loaded card quickly enough could have experienced the same problem on a Mac IIvx.
• Replaced all occurences of "message" in the include files iccmDefs.h, ipcGDefs.h, and timerlibrary.h with "mMessage" to avoid conflicts with the standard MPW Event Manager include file, Events.h. Most of the A/ROSE include files already had been changed, but a few references to "message" were missed.
Release notes for A/ROSE 1.1.9
• Modified the cache flushing code to fix a problem that occured when running on a Macintosh IIvx. The previous A/ROSE cache flushing mechanism only caused the internal processor cache to be flushed and not the external cache as well.
Release notes for A/ROSE 1.1.8
• Implemented a workaround for a severe performance slowdown affecting 68030-based Macintoshes. The slowdown is caused by the poor resolution--or lack--of memory page tables when Virtual Memory is disabled on 68030-based Macintoshes, beginning with the Macintosh IIci. This causes large blocks of memory (one-megabyte blocks or even all of motherboard RAM) to be made non-cachable when memory is locked using the Mac OS LockMemory routine in the MemoryDispatch trap.
The slowdown did not affect pre-Mac IIci 68030-based Macintoshes (which did not implement the MemoryDispatch trap) or 68000-, 68020-, or 68040-based Macintoshes.
• Fixed an OpenResFile/OpenRFPerm patch bug introduced in A/ROSE 1.1.7 that, under System 6.0.x., prevented the downloading of code to smart NuBus cards.
• Made the A/ROSE driver TestSlot code backward-compatible with A/ROSE file versions prior to 1.1.7 (see the release notes for A/ROSE 1.1.7 below). This will prevent code linked with the A/ROSE 1.1.8 libraries from crashing if the installed A/ROSE file is version 1.1.6 or less.
If an A/ROSE application intended to run on the motherboard is linked with the A/ROSE 1.1.8 libraries, a call to TestSlot will first attempt to load the 'tslo(1)' resource from the A/ROSE file. If the installed A/ROSE file is version 1.1.7 or later, the resource will be found, loaded, and executed.
If the installed A/ROSE file is version 1.1.6 or earlier, the resource will not be found; in this case, the application will use default TestSlot code linked in from the A/ROSE 1.1.8 libraries.
• Fixed a bug in the nprm application that could cause an uninitialized value to be used, possibly causing random crashes.
Release notes for A/ROSE 1.1.7
(Note: A/ROSE 1.1.7 was distributed on the System 7.1 disks, but was quickly obsoleted by A/ROSE 1.1.8.)
• Moved the A/ROSE driver TestSlot code to a ‘tslo(1)’ resource in A/ROSE file. This means that applications intended to run on the motherboard no longer have to link with code that directly accesses NuBus slot-space. NOTE: Any application that links with the A/ROSE 1.1.7 library files requires the A/ROSE file installed to be version 1.1.7 or greater.
• Fixed an OpenResFile/OpenRFPerm patch bug that caused stack to be incorrectly reset if the patch was not executed. This caused control to be returned to the Finder instead of the launching application when a sublaunched application terminated.
• Segmented the generic A/ROSE OS. This reduces the size of the largest A/ROSE segment from 23K to 13K and the amount of heap space required to download the A/ROSE OS by 10K (assuming the user’s segments are less than 13K).
• Fixed a downloading bug that could cause gCardInit0, gCardInit1, and gCardInit2 to contain bad addresses (rather than nil) if a customization resource wasn’t found.
• Fixed a bug that caused the ICCM global "iMsgFwa" to be nil. It now correctly contains the address of the first message buffer.
• Added a new message code recognized by the Remote System Manager: RSM_MemoryInfo. The call returns:
mOData[0] = CountFreeMem();
mOData[1] = CountMaxMem();
• Added an A/ROSE driver example program to dump the names of all registered tasks on all cards (including the motherboard).
• Cleaned up the printing code in the nprm application.
• Added sprintf routines to the A/ROSE driver and A/ROSE OS printf example code.
Release notes for A/ROSE 1.1.6
• Fixed a bug in the A/ROSE driver TestSlot code that prevented the code from recognizing smart NuBus cards with fewer than four byte lanes. This bug was actually fixed in A/ROSE 1.1.5, but the fix was not documented in the A/ROSE 1.1.5 release notes.
• Modified the A/ROSE Forwarder to correctly use the AppleTalk Transition Queue, allowing open connections to be closed when the network is changed and a robust mechanism for reposting on a new network.
• Increased the amount of system heap preallocated by the A/ROSE Forwarder to avoid running out of heap when loading other resources. This could prevent the MPP resource from loading on a Macintosh IIfx or Quadra.
• Increased the size of the internal A/ROSE Forwarder buffers to 2200 bytes. Several related definitions in the file Fwd.h have also been changed.
• Fixed an incompatibility between DiskLock 2.1 and the A/ROSE Forwarder.